// vite.config.ts
import fs2 from "node:fs";
import path2 from "node:path";
import process2 from "node:process";
import { defineConfig, loadEnv } from "file:///D:/workItem/%E7%9F%A5%E4%BA%A7%E5%AE%9D-vue-%E6%9C%8D%E5%8A%A1%E5%95%86%E5%9F%8E/node_modules/.pnpm/vite@5.1.4_sass@1.71.1/node_modules/vite/dist/node/index.js";

// vite/plugins/index.ts
import vue from "file:///D:/workItem/%E7%9F%A5%E4%BA%A7%E5%AE%9D-vue-%E6%9C%8D%E5%8A%A1%E5%95%86%E5%9F%8E/node_modules/.pnpm/@vitejs+plugin-vue@5.0.4_vite@5.1.4_vue@3.4.20/node_modules/@vitejs/plugin-vue/dist/index.mjs";
import vueJsx from "file:///D:/workItem/%E7%9F%A5%E4%BA%A7%E5%AE%9D-vue-%E6%9C%8D%E5%8A%A1%E5%95%86%E5%9F%8E/node_modules/.pnpm/@vitejs+plugin-vue-jsx@3.1.0_vite@5.1.4_vue@3.4.20/node_modules/@vitejs/plugin-vue-jsx/dist/index.mjs";

// vite/plugins/app-info.ts
import picocolors from "file:///D:/workItem/%E7%9F%A5%E4%BA%A7%E5%AE%9D-vue-%E6%9C%8D%E5%8A%A1%E5%95%86%E5%9F%8E/node_modules/.pnpm/picocolors@1.0.0/node_modules/picocolors/picocolors.js";
function appInfo() {
  return {
    name: "appInfo",
    apply: "serve",
    async buildStart() {
      const { bold, green, bgGreen, underline } = picocolors;
    }
  };
}

// vite/plugins/devtools.ts
import VueDevTools from "file:///D:/workItem/%E7%9F%A5%E4%BA%A7%E5%AE%9D-vue-%E6%9C%8D%E5%8A%A1%E5%95%86%E5%9F%8E/node_modules/.pnpm/vite-plugin-vue-devtools@7.0.15_vite@5.1.4_vue@3.4.20/node_modules/vite-plugin-vue-devtools/dist/vite.mjs";
function createDevtools(env) {
  const { VITE_OPEN_DEVTOOLS } = env;
  return VITE_OPEN_DEVTOOLS === "true" && VueDevTools();
}

// vite/plugins/auto-import.ts
import autoImport from "file:///D:/workItem/%E7%9F%A5%E4%BA%A7%E5%AE%9D-vue-%E6%9C%8D%E5%8A%A1%E5%95%86%E5%9F%8E/node_modules/.pnpm/unplugin-auto-import@0.17.5/node_modules/unplugin-auto-import/dist/vite.js";
function createAutoImport() {
  return autoImport({
    imports: [
      "vue",
      "vue-router",
      "pinia"
    ],
    dts: "./src/types/auto-imports.d.ts",
    dirs: [
      "./src/utils/composables/**"
    ]
  });
}

// vite/plugins/components.ts
import components from "file:///D:/workItem/%E7%9F%A5%E4%BA%A7%E5%AE%9D-vue-%E6%9C%8D%E5%8A%A1%E5%95%86%E5%9F%8E/node_modules/.pnpm/unplugin-vue-components@0.26.0_vue@3.4.20/node_modules/unplugin-vue-components/dist/vite.js";
function createComponents() {
  return components({
    dirs: ["src/components"],
    include: [/\.vue$/, /\.vue\?vue/, /\.tsx$/],
    dts: "./src/types/components.d.ts"
  });
}

// vite/plugins/unocss.ts
import Unocss from "file:///D:/workItem/%E7%9F%A5%E4%BA%A7%E5%AE%9D-vue-%E6%9C%8D%E5%8A%A1%E5%95%86%E5%9F%8E/node_modules/.pnpm/unocss@0.58.5_postcss@8.4.35_vite@5.1.4/node_modules/unocss/dist/vite.mjs";
function createUnocss() {
  return Unocss();
}

// vite/plugins/svg-icon.ts
import path from "node:path";
import process from "node:process";
import { createSvgIconsPlugin } from "file:///D:/workItem/%E7%9F%A5%E4%BA%A7%E5%AE%9D-vue-%E6%9C%8D%E5%8A%A1%E5%95%86%E5%9F%8E/node_modules/.pnpm/vite-plugin-svg-icons@2.0.1_vite@5.1.4/node_modules/vite-plugin-svg-icons/dist/index.mjs";
function createSvgIcon(isBuild) {
  return createSvgIconsPlugin({
    iconDirs: [path.resolve(process.cwd(), "src/assets/icons/")],
    symbolId: "icon-[dir]-[name]",
    svgoOptions: isBuild
  });
}

// vite/plugins/mock.ts
import { vitePluginFakeServer } from "file:///D:/workItem/%E7%9F%A5%E4%BA%A7%E5%AE%9D-vue-%E6%9C%8D%E5%8A%A1%E5%95%86%E5%9F%8E/node_modules/.pnpm/vite-plugin-fake-server@2.1.1/node_modules/vite-plugin-fake-server/dist/index.mjs";
function createMock(env, isBuild) {
  const { VITE_BUILD_MOCK } = env;
  return vitePluginFakeServer({
    logger: !isBuild,
    include: "src/mock",
    infixName: false,
    enableProd: isBuild && VITE_BUILD_MOCK === "true"
  });
}

// vite/plugins/layouts.ts
import Layouts from "file:///D:/workItem/%E7%9F%A5%E4%BA%A7%E5%AE%9D-vue-%E6%9C%8D%E5%8A%A1%E5%95%86%E5%9F%8E/node_modules/.pnpm/vite-plugin-vue-meta-layouts@0.4.1_vite@5.1.4_vue-router@4.3.0/node_modules/vite-plugin-vue-meta-layouts/dist/index.mjs";
function createLayouts() {
  return Layouts();
}

// vite/plugins/pages.ts
import Pages from "file:///D:/workItem/%E7%9F%A5%E4%BA%A7%E5%AE%9D-vue-%E6%9C%8D%E5%8A%A1%E5%95%86%E5%9F%8E/node_modules/.pnpm/vite-plugin-pages@0.32.0_@vue+compiler-sfc@3.4.20_vite@5.1.4/node_modules/vite-plugin-pages/dist/index.js";
function createPages() {
  return Pages({
    dirs: "src/views",
    exclude: [
      "**/components/**/*.vue"
    ]
  });
}

// vite/plugins/compression.ts
import { compression } from "file:///D:/workItem/%E7%9F%A5%E4%BA%A7%E5%AE%9D-vue-%E6%9C%8D%E5%8A%A1%E5%95%86%E5%9F%8E/node_modules/.pnpm/vite-plugin-compression2@0.12.0/node_modules/vite-plugin-compression2/dist/index.mjs";
function createCompression(env, isBuild) {
  const plugin = [];
  if (isBuild) {
    const { VITE_BUILD_COMPRESS } = env;
    const compressList = VITE_BUILD_COMPRESS.split(",");
    if (compressList.includes("gzip")) {
      plugin.push(
        compression()
      );
    }
    if (compressList.includes("brotli")) {
      plugin.push(
        compression({
          exclude: [/\.(br)$/, /\.(gz)$/],
          algorithm: "brotliCompress"
        })
      );
    }
  }
  return plugin;
}

// vite/plugins/archiver.ts
import fs from "node:fs";
import dayjs from "file:///D:/workItem/%E7%9F%A5%E4%BA%A7%E5%AE%9D-vue-%E6%9C%8D%E5%8A%A1%E5%95%86%E5%9F%8E/node_modules/.pnpm/dayjs@1.11.10/node_modules/dayjs/dayjs.min.js";
import archiver from "file:///D:/workItem/%E7%9F%A5%E4%BA%A7%E5%AE%9D-vue-%E6%9C%8D%E5%8A%A1%E5%95%86%E5%9F%8E/node_modules/.pnpm/archiver@6.0.1/node_modules/archiver/index.js";
function sleep(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}
function createArchiver(env) {
  const { VITE_BUILD_ARCHIVE } = env;
  let outDir;
  return {
    name: "vite-plugin-archiver",
    apply: "build",
    configResolved(resolvedConfig) {
      outDir = resolvedConfig.build.outDir;
    },
    async closeBundle() {
      if (["zip", "tar"].includes(VITE_BUILD_ARCHIVE)) {
        await sleep(1e3);
        const archive = archiver(VITE_BUILD_ARCHIVE, {
          ...VITE_BUILD_ARCHIVE === "zip" && { zlib: { level: 9 } },
          ...VITE_BUILD_ARCHIVE === "tar" && { gzip: true, gzipOptions: { level: 9 } }
        });
        const output = fs.createWriteStream(`${outDir}.${dayjs().format("YYYY-MM-DD-HH-mm-ss")}.${VITE_BUILD_ARCHIVE === "zip" ? "zip" : "tar.gz"}`);
        archive.pipe(output);
        archive.directory(outDir, false);
        archive.finalize();
      }
    }
  };
}

// vite/plugins/console.ts
import TurboConsole from "file:///D:/workItem/%E7%9F%A5%E4%BA%A7%E5%AE%9D-vue-%E6%9C%8D%E5%8A%A1%E5%95%86%E5%9F%8E/node_modules/.pnpm/unplugin-turbo-console@1.4.0_vite@5.1.4_vue@3.4.20/node_modules/unplugin-turbo-console/dist/vite.js";
function createConsole() {
  return TurboConsole();
}

// vite/plugins/banner.ts
import banner from "file:///D:/workItem/%E7%9F%A5%E4%BA%A7%E5%AE%9D-vue-%E6%9C%8D%E5%8A%A1%E5%95%86%E5%9F%8E/node_modules/.pnpm/vite-plugin-banner@0.7.1/node_modules/vite-plugin-banner/dist/index.mjs";
function createBanner() {
  return banner(`
/**
 * \u7531 Fantastic-startkit \u63D0\u4F9B\u6280\u672F\u652F\u6301
 * https://hooray.gitee.io/fantastic-startkit/
 * Powered by Fantastic-startkit
 * https://hooray.github.io/fantastic-startkit/
 */
  `);
}

// vite/plugins/index.ts
function createVitePlugins(viteEnv, isBuild = false) {
  const vitePlugins = [
    appInfo(),
    vue(),
    vueJsx()
  ];
  vitePlugins.push(createDevtools(viteEnv));
  vitePlugins.push(createAutoImport());
  vitePlugins.push(createComponents());
  vitePlugins.push(createUnocss());
  vitePlugins.push(createSvgIcon(isBuild));
  vitePlugins.push(createMock(viteEnv, isBuild));
  vitePlugins.push(createLayouts());
  vitePlugins.push(createPages());
  vitePlugins.push(...createCompression(viteEnv, isBuild));
  vitePlugins.push(createArchiver(viteEnv));
  vitePlugins.push(createConsole());
  vitePlugins.push(createBanner());
  return vitePlugins;
}

// vite.config.ts
var __vite_injected_original_dirname = "D:\\workItem\\\u77E5\u4EA7\u5B9D-vue-\u670D\u52A1\u5546\u57CE";
var vite_config_default = ({ mode, command }) => {
  const env = loadEnv(mode, process2.cwd());
  const scssResources = [];
  fs2.readdirSync("src/assets/styles/resources").forEach((dirname) => {
    if (fs2.statSync(`src/assets/styles/resources/${dirname}`).isFile()) {
      scssResources.push(`@use "src/assets/styles/resources/${dirname}" as *;`);
    }
  });
  return defineConfig({
    base: "./",
    // 开发服务器选项 https://cn.vitejs.dev/config/#server-options
    server: {
      open: true,
      proxy: {
        "/proxy": {
          target: env.VITE_APP_API_BASEURL,
          changeOrigin: command === "serve" && env.VITE_OPEN_PROXY === "true",
          rewrite: (path3) => path3.replace(/\/proxy/, "")
        }
      }
    },
    // 构建选项 https://cn.vitejs.dev/config/#server-fsserve-root
    build: {
      outDir: mode === "production" ? "dist" : `dist-${mode}`,
      sourcemap: env.VITE_BUILD_SOURCEMAP === "true"
    },
    plugins: createVitePlugins(env, command === "build"),
    resolve: {
      alias: {
        "@": path2.resolve(__vite_injected_original_dirname, "src"),
        "#": path2.resolve(__vite_injected_original_dirname, "src/types")
      }
    },
    css: {
      preprocessorOptions: {
        scss: {
          additionalData: scssResources.join("")
        }
      }
    }
  });
};
export {
  vite_config_default as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAidml0ZS9wbHVnaW5zL2luZGV4LnRzIiwgInZpdGUvcGx1Z2lucy9hcHAtaW5mby50cyIsICJ2aXRlL3BsdWdpbnMvZGV2dG9vbHMudHMiLCAidml0ZS9wbHVnaW5zL2F1dG8taW1wb3J0LnRzIiwgInZpdGUvcGx1Z2lucy9jb21wb25lbnRzLnRzIiwgInZpdGUvcGx1Z2lucy91bm9jc3MudHMiLCAidml0ZS9wbHVnaW5zL3N2Zy1pY29uLnRzIiwgInZpdGUvcGx1Z2lucy9tb2NrLnRzIiwgInZpdGUvcGx1Z2lucy9sYXlvdXRzLnRzIiwgInZpdGUvcGx1Z2lucy9wYWdlcy50cyIsICJ2aXRlL3BsdWdpbnMvY29tcHJlc3Npb24udHMiLCAidml0ZS9wbHVnaW5zL2FyY2hpdmVyLnRzIiwgInZpdGUvcGx1Z2lucy9jb25zb2xlLnRzIiwgInZpdGUvcGx1Z2lucy9iYW5uZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFx3b3JrSXRlbVxcXFxcdTc3RTVcdTRFQTdcdTVCOUQtdnVlLVx1NjcwRFx1NTJBMVx1NTU0Nlx1NTdDRVwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcd29ya0l0ZW1cXFxcXHU3N0U1XHU0RUE3XHU1QjlELXZ1ZS1cdTY3MERcdTUyQTFcdTU1NDZcdTU3Q0VcXFxcdml0ZS5jb25maWcudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L3dvcmtJdGVtLyVFNyU5RiVBNSVFNCVCQSVBNyVFNSVBRSU5RC12dWUtJUU2JTlDJThEJUU1JThBJUExJUU1JTk1JTg2JUU1JTlGJThFL3ZpdGUuY29uZmlnLnRzXCI7aW1wb3J0IGZzIGZyb20gJ25vZGU6ZnMnXHJcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCdcclxuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJ1xyXG5pbXBvcnQgeyBkZWZpbmVDb25maWcsIGxvYWRFbnYgfSBmcm9tICd2aXRlJ1xyXG5pbXBvcnQgY3JlYXRlVml0ZVBsdWdpbnMgZnJvbSAnLi92aXRlL3BsdWdpbnMnXHJcblxyXG4vLyBodHRwczovL3ZpdGVqcy5kZXYvY29uZmlnL1xyXG5leHBvcnQgZGVmYXVsdCAoeyBtb2RlLCBjb21tYW5kIH0pID0+IHtcclxuICBjb25zdCBlbnYgPSBsb2FkRW52KG1vZGUsIHByb2Nlc3MuY3dkKCkpXHJcbiAgLy8gXHU1MTY4XHU1QzQwIHNjc3MgXHU4RDQ0XHU2RTkwXHJcbiAgY29uc3Qgc2Nzc1Jlc291cmNlcyA9IFtdXHJcbiAgZnMucmVhZGRpclN5bmMoJ3NyYy9hc3NldHMvc3R5bGVzL3Jlc291cmNlcycpLmZvckVhY2goKGRpcm5hbWUpID0+IHtcclxuICAgIGlmIChmcy5zdGF0U3luYyhgc3JjL2Fzc2V0cy9zdHlsZXMvcmVzb3VyY2VzLyR7ZGlybmFtZX1gKS5pc0ZpbGUoKSkge1xyXG4gICAgICBzY3NzUmVzb3VyY2VzLnB1c2goYEB1c2UgXCJzcmMvYXNzZXRzL3N0eWxlcy9yZXNvdXJjZXMvJHtkaXJuYW1lfVwiIGFzICo7YClcclxuICAgIH1cclxuICB9KVxyXG4gIHJldHVybiBkZWZpbmVDb25maWcoe1xyXG4gICAgYmFzZTogJy4vJyxcclxuICAgIC8vIFx1NUYwMFx1NTNEMVx1NjcwRFx1NTJBMVx1NTY2OFx1OTAwOVx1OTg3OSBodHRwczovL2NuLnZpdGVqcy5kZXYvY29uZmlnLyNzZXJ2ZXItb3B0aW9uc1xyXG4gICAgc2VydmVyOiB7XHJcbiAgICAgIG9wZW46IHRydWUsXHJcbiAgICAgIHByb3h5OiB7XHJcbiAgICAgICAgJy9wcm94eSc6IHtcclxuICAgICAgICAgIHRhcmdldDogZW52LlZJVEVfQVBQX0FQSV9CQVNFVVJMLFxyXG4gICAgICAgICAgY2hhbmdlT3JpZ2luOiBjb21tYW5kID09PSAnc2VydmUnICYmIGVudi5WSVRFX09QRU5fUFJPWFkgPT09ICd0cnVlJyxcclxuICAgICAgICAgIHJld3JpdGU6IHBhdGggPT4gcGF0aC5yZXBsYWNlKC9cXC9wcm94eS8sICcnKSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICAgIC8vIFx1Njc4NFx1NUVGQVx1OTAwOVx1OTg3OSBodHRwczovL2NuLnZpdGVqcy5kZXYvY29uZmlnLyNzZXJ2ZXItZnNzZXJ2ZS1yb290XHJcbiAgICBidWlsZDoge1xyXG4gICAgICBvdXREaXI6IG1vZGUgPT09ICdwcm9kdWN0aW9uJyA/ICdkaXN0JyA6IGBkaXN0LSR7bW9kZX1gLFxyXG4gICAgICBzb3VyY2VtYXA6IGVudi5WSVRFX0JVSUxEX1NPVVJDRU1BUCA9PT0gJ3RydWUnLFxyXG4gICAgfSxcclxuICAgIHBsdWdpbnM6IGNyZWF0ZVZpdGVQbHVnaW5zKGVudiwgY29tbWFuZCA9PT0gJ2J1aWxkJyksXHJcbiAgICByZXNvbHZlOiB7XHJcbiAgICAgIGFsaWFzOiB7XHJcbiAgICAgICAgJ0AnOiBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnc3JjJyksXHJcbiAgICAgICAgJyMnOiBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnc3JjL3R5cGVzJyksXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgY3NzOiB7XHJcbiAgICAgIHByZXByb2Nlc3Nvck9wdGlvbnM6IHtcclxuICAgICAgICBzY3NzOiB7XHJcbiAgICAgICAgICBhZGRpdGlvbmFsRGF0YTogc2Nzc1Jlc291cmNlcy5qb2luKCcnKSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICB9KVxyXG59XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcd29ya0l0ZW1cXFxcXHU3N0U1XHU0RUE3XHU1QjlELXZ1ZS1cdTY3MERcdTUyQTFcdTU1NDZcdTU3Q0VcXFxcdml0ZVxcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJEOlxcXFx3b3JrSXRlbVxcXFxcdTc3RTVcdTRFQTdcdTVCOUQtdnVlLVx1NjcwRFx1NTJBMVx1NTU0Nlx1NTdDRVxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcaW5kZXgudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L3dvcmtJdGVtLyVFNyU5RiVBNSVFNCVCQSVBNyVFNSVBRSU5RC12dWUtJUU2JTlDJThEJUU1JThBJUExJUU1JTk1JTg2JUU1JTlGJThFL3ZpdGUvcGx1Z2lucy9pbmRleC50c1wiO2ltcG9ydCB0eXBlIHsgUGx1Z2luT3B0aW9uIH0gZnJvbSAndml0ZSdcclxuaW1wb3J0IHZ1ZSBmcm9tICdAdml0ZWpzL3BsdWdpbi12dWUnXHJcbmltcG9ydCB2dWVKc3ggZnJvbSAnQHZpdGVqcy9wbHVnaW4tdnVlLWpzeCdcclxuaW1wb3J0IGFwcEluZm8gZnJvbSAnLi9hcHAtaW5mbydcclxuXHJcbmltcG9ydCBjcmVhdGVEZXZ0b29scyBmcm9tICcuL2RldnRvb2xzJ1xyXG5pbXBvcnQgY3JlYXRlQXV0b0ltcG9ydCBmcm9tICcuL2F1dG8taW1wb3J0J1xyXG5pbXBvcnQgY3JlYXRlQ29tcG9uZW50cyBmcm9tICcuL2NvbXBvbmVudHMnXHJcbmltcG9ydCBjcmVhdGVVbm9jc3MgZnJvbSAnLi91bm9jc3MnXHJcbmltcG9ydCBjcmVhdGVTdmdJY29uIGZyb20gJy4vc3ZnLWljb24nXHJcbmltcG9ydCBjcmVhdGVNb2NrIGZyb20gJy4vbW9jaydcclxuaW1wb3J0IGNyZWF0ZUxheW91dHMgZnJvbSAnLi9sYXlvdXRzJ1xyXG5pbXBvcnQgY3JlYXRlUGFnZXMgZnJvbSAnLi9wYWdlcydcclxuaW1wb3J0IGNyZWF0ZUNvbXByZXNzaW9uIGZyb20gJy4vY29tcHJlc3Npb24nXHJcbmltcG9ydCBjcmVhdGVBcmNoaXZlciBmcm9tICcuL2FyY2hpdmVyJ1xyXG5pbXBvcnQgY3JlYXRlQ29uc29sZSBmcm9tICcuL2NvbnNvbGUnXHJcbmltcG9ydCBjcmVhdGVCYW5uZXIgZnJvbSAnLi9iYW5uZXInXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVWaXRlUGx1Z2lucyh2aXRlRW52LCBpc0J1aWxkID0gZmFsc2UpIHtcclxuICBjb25zdCB2aXRlUGx1Z2luczogKFBsdWdpbk9wdGlvbiB8IFBsdWdpbk9wdGlvbltdKVtdID0gW1xyXG4gICAgYXBwSW5mbygpLFxyXG4gICAgdnVlKCksXHJcbiAgICB2dWVKc3goKSxcclxuICBdXHJcbiAgdml0ZVBsdWdpbnMucHVzaChjcmVhdGVEZXZ0b29scyh2aXRlRW52KSlcclxuICB2aXRlUGx1Z2lucy5wdXNoKGNyZWF0ZUF1dG9JbXBvcnQoKSlcclxuICB2aXRlUGx1Z2lucy5wdXNoKGNyZWF0ZUNvbXBvbmVudHMoKSlcclxuICB2aXRlUGx1Z2lucy5wdXNoKGNyZWF0ZVVub2NzcygpKVxyXG4gIHZpdGVQbHVnaW5zLnB1c2goY3JlYXRlU3ZnSWNvbihpc0J1aWxkKSlcclxuICB2aXRlUGx1Z2lucy5wdXNoKGNyZWF0ZU1vY2sodml0ZUVudiwgaXNCdWlsZCkpXHJcbiAgdml0ZVBsdWdpbnMucHVzaChjcmVhdGVMYXlvdXRzKCkpXHJcbiAgdml0ZVBsdWdpbnMucHVzaChjcmVhdGVQYWdlcygpKVxyXG4gIHZpdGVQbHVnaW5zLnB1c2goLi4uY3JlYXRlQ29tcHJlc3Npb24odml0ZUVudiwgaXNCdWlsZCkpXHJcbiAgdml0ZVBsdWdpbnMucHVzaChjcmVhdGVBcmNoaXZlcih2aXRlRW52KSlcclxuICB2aXRlUGx1Z2lucy5wdXNoKGNyZWF0ZUNvbnNvbGUoKSlcclxuICB2aXRlUGx1Z2lucy5wdXNoKGNyZWF0ZUJhbm5lcigpKVxyXG4gIHJldHVybiB2aXRlUGx1Z2luc1xyXG59XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcd29ya0l0ZW1cXFxcXHU3N0U1XHU0RUE3XHU1QjlELXZ1ZS1cdTY3MERcdTUyQTFcdTU1NDZcdTU3Q0VcXFxcdml0ZVxcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJEOlxcXFx3b3JrSXRlbVxcXFxcdTc3RTVcdTRFQTdcdTVCOUQtdnVlLVx1NjcwRFx1NTJBMVx1NTU0Nlx1NTdDRVxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcYXBwLWluZm8udHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L3dvcmtJdGVtLyVFNyU5RiVBNSVFNCVCQSVBNyVFNSVBRSU5RC12dWUtJUU2JTlDJThEJUU1JThBJUExJUU1JTk1JTg2JUU1JTlGJThFL3ZpdGUvcGx1Z2lucy9hcHAtaW5mby50c1wiO2ltcG9ydCBwaWNvY29sb3JzIGZyb20gJ3BpY29jb2xvcnMnXHJcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAndml0ZSdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFwcEluZm8oKTogUGx1Z2luIHtcclxuICByZXR1cm4ge1xyXG4gICAgbmFtZTogJ2FwcEluZm8nLFxyXG4gICAgYXBwbHk6ICdzZXJ2ZScsXHJcbiAgICBhc3luYyBidWlsZFN0YXJ0KCkge1xyXG4gICAgICBjb25zdCB7IGJvbGQsIGdyZWVuLCBiZ0dyZWVuLCB1bmRlcmxpbmUgfSA9IHBpY29jb2xvcnNcclxuICAgIH0sXHJcbiAgfVxyXG59XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcd29ya0l0ZW1cXFxcXHU3N0U1XHU0RUE3XHU1QjlELXZ1ZS1cdTY3MERcdTUyQTFcdTU1NDZcdTU3Q0VcXFxcdml0ZVxcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJEOlxcXFx3b3JrSXRlbVxcXFxcdTc3RTVcdTRFQTdcdTVCOUQtdnVlLVx1NjcwRFx1NTJBMVx1NTU0Nlx1NTdDRVxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcZGV2dG9vbHMudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L3dvcmtJdGVtLyVFNyU5RiVBNSVFNCVCQSVBNyVFNSVBRSU5RC12dWUtJUU2JTlDJThEJUU1JThBJUExJUU1JTk1JTg2JUU1JTlGJThFL3ZpdGUvcGx1Z2lucy9kZXZ0b29scy50c1wiO2ltcG9ydCBWdWVEZXZUb29scyBmcm9tICd2aXRlLXBsdWdpbi12dWUtZGV2dG9vbHMnXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVEZXZ0b29scyhlbnYpIHtcclxuICBjb25zdCB7IFZJVEVfT1BFTl9ERVZUT09MUyB9ID0gZW52XHJcbiAgcmV0dXJuIFZJVEVfT1BFTl9ERVZUT09MUyA9PT0gJ3RydWUnICYmIFZ1ZURldlRvb2xzKClcclxufVxyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXHdvcmtJdGVtXFxcXFx1NzdFNVx1NEVBN1x1NUI5RC12dWUtXHU2NzBEXHU1MkExXHU1NTQ2XHU1N0NFXFxcXHZpdGVcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcd29ya0l0ZW1cXFxcXHU3N0U1XHU0RUE3XHU1QjlELXZ1ZS1cdTY3MERcdTUyQTFcdTU1NDZcdTU3Q0VcXFxcdml0ZVxcXFxwbHVnaW5zXFxcXGF1dG8taW1wb3J0LnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi93b3JrSXRlbS8lRTclOUYlQTUlRTQlQkElQTclRTUlQUUlOUQtdnVlLSVFNiU5QyU4RCVFNSU4QSVBMSVFNSU5NSU4NiVFNSU5RiU4RS92aXRlL3BsdWdpbnMvYXV0by1pbXBvcnQudHNcIjtpbXBvcnQgYXV0b0ltcG9ydCBmcm9tICd1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQXV0b0ltcG9ydCgpIHtcclxuICByZXR1cm4gYXV0b0ltcG9ydCh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICd2dWUnLFxyXG4gICAgICAndnVlLXJvdXRlcicsXHJcbiAgICAgICdwaW5pYScsXHJcbiAgICBdLFxyXG4gICAgZHRzOiAnLi9zcmMvdHlwZXMvYXV0by1pbXBvcnRzLmQudHMnLFxyXG4gICAgZGlyczogW1xyXG4gICAgICAnLi9zcmMvdXRpbHMvY29tcG9zYWJsZXMvKionLFxyXG4gICAgXSxcclxuICB9KVxyXG59XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcd29ya0l0ZW1cXFxcXHU3N0U1XHU0RUE3XHU1QjlELXZ1ZS1cdTY3MERcdTUyQTFcdTU1NDZcdTU3Q0VcXFxcdml0ZVxcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJEOlxcXFx3b3JrSXRlbVxcXFxcdTc3RTVcdTRFQTdcdTVCOUQtdnVlLVx1NjcwRFx1NTJBMVx1NTU0Nlx1NTdDRVxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcY29tcG9uZW50cy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovd29ya0l0ZW0vJUU3JTlGJUE1JUU0JUJBJUE3JUU1JUFFJTlELXZ1ZS0lRTYlOUMlOEQlRTUlOEElQTElRTUlOTUlODYlRTUlOUYlOEUvdml0ZS9wbHVnaW5zL2NvbXBvbmVudHMudHNcIjtpbXBvcnQgY29tcG9uZW50cyBmcm9tICd1bnBsdWdpbi12dWUtY29tcG9uZW50cy92aXRlJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50cygpIHtcclxuICByZXR1cm4gY29tcG9uZW50cyh7XHJcbiAgICBkaXJzOiBbJ3NyYy9jb21wb25lbnRzJ10sXHJcbiAgICBpbmNsdWRlOiBbL1xcLnZ1ZSQvLCAvXFwudnVlXFw/dnVlLywgL1xcLnRzeCQvXSxcclxuICAgIGR0czogJy4vc3JjL3R5cGVzL2NvbXBvbmVudHMuZC50cycsXHJcbiAgfSlcclxufVxyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXHdvcmtJdGVtXFxcXFx1NzdFNVx1NEVBN1x1NUI5RC12dWUtXHU2NzBEXHU1MkExXHU1NTQ2XHU1N0NFXFxcXHZpdGVcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcd29ya0l0ZW1cXFxcXHU3N0U1XHU0RUE3XHU1QjlELXZ1ZS1cdTY3MERcdTUyQTFcdTU1NDZcdTU3Q0VcXFxcdml0ZVxcXFxwbHVnaW5zXFxcXHVub2Nzcy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovd29ya0l0ZW0vJUU3JTlGJUE1JUU0JUJBJUE3JUU1JUFFJTlELXZ1ZS0lRTYlOUMlOEQlRTUlOEElQTElRTUlOTUlODYlRTUlOUYlOEUvdml0ZS9wbHVnaW5zL3Vub2Nzcy50c1wiO2ltcG9ydCBVbm9jc3MgZnJvbSAndW5vY3NzL3ZpdGUnXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVVbm9jc3MoKSB7XHJcbiAgcmV0dXJuIFVub2NzcygpXHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFx3b3JrSXRlbVxcXFxcdTc3RTVcdTRFQTdcdTVCOUQtdnVlLVx1NjcwRFx1NTJBMVx1NTU0Nlx1NTdDRVxcXFx2aXRlXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXHdvcmtJdGVtXFxcXFx1NzdFNVx1NEVBN1x1NUI5RC12dWUtXHU2NzBEXHU1MkExXHU1NTQ2XHU1N0NFXFxcXHZpdGVcXFxccGx1Z2luc1xcXFxzdmctaWNvbi50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovd29ya0l0ZW0vJUU3JTlGJUE1JUU0JUJBJUE3JUU1JUFFJTlELXZ1ZS0lRTYlOUMlOEQlRTUlOEElQTElRTUlOTUlODYlRTUlOUYlOEUvdml0ZS9wbHVnaW5zL3N2Zy1pY29uLnRzXCI7aW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJ1xyXG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnXHJcbmltcG9ydCB7IGNyZWF0ZVN2Z0ljb25zUGx1Z2luIH0gZnJvbSAndml0ZS1wbHVnaW4tc3ZnLWljb25zJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3ZnSWNvbihpc0J1aWxkKSB7XHJcbiAgcmV0dXJuIGNyZWF0ZVN2Z0ljb25zUGx1Z2luKHtcclxuICAgIGljb25EaXJzOiBbcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksICdzcmMvYXNzZXRzL2ljb25zLycpXSxcclxuICAgIHN5bWJvbElkOiAnaWNvbi1bZGlyXS1bbmFtZV0nLFxyXG4gICAgc3Znb09wdGlvbnM6IGlzQnVpbGQsXHJcbiAgfSlcclxufVxyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXHdvcmtJdGVtXFxcXFx1NzdFNVx1NEVBN1x1NUI5RC12dWUtXHU2NzBEXHU1MkExXHU1NTQ2XHU1N0NFXFxcXHZpdGVcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcd29ya0l0ZW1cXFxcXHU3N0U1XHU0RUE3XHU1QjlELXZ1ZS1cdTY3MERcdTUyQTFcdTU1NDZcdTU3Q0VcXFxcdml0ZVxcXFxwbHVnaW5zXFxcXG1vY2sudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L3dvcmtJdGVtLyVFNyU5RiVBNSVFNCVCQSVBNyVFNSVBRSU5RC12dWUtJUU2JTlDJThEJUU1JThBJUExJUU1JTk1JTg2JUU1JTlGJThFL3ZpdGUvcGx1Z2lucy9tb2NrLnRzXCI7aW1wb3J0IHsgdml0ZVBsdWdpbkZha2VTZXJ2ZXIgfSBmcm9tICd2aXRlLXBsdWdpbi1mYWtlLXNlcnZlcidcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZU1vY2soZW52LCBpc0J1aWxkKSB7XHJcbiAgY29uc3QgeyBWSVRFX0JVSUxEX01PQ0sgfSA9IGVudlxyXG4gIHJldHVybiB2aXRlUGx1Z2luRmFrZVNlcnZlcih7XHJcbiAgICBsb2dnZXI6ICFpc0J1aWxkLFxyXG4gICAgaW5jbHVkZTogJ3NyYy9tb2NrJyxcclxuICAgIGluZml4TmFtZTogZmFsc2UsXHJcbiAgICBlbmFibGVQcm9kOiBpc0J1aWxkICYmIFZJVEVfQlVJTERfTU9DSyA9PT0gJ3RydWUnLFxyXG4gIH0pXHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFx3b3JrSXRlbVxcXFxcdTc3RTVcdTRFQTdcdTVCOUQtdnVlLVx1NjcwRFx1NTJBMVx1NTU0Nlx1NTdDRVxcXFx2aXRlXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXHdvcmtJdGVtXFxcXFx1NzdFNVx1NEVBN1x1NUI5RC12dWUtXHU2NzBEXHU1MkExXHU1NTQ2XHU1N0NFXFxcXHZpdGVcXFxccGx1Z2luc1xcXFxsYXlvdXRzLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi93b3JrSXRlbS8lRTclOUYlQTUlRTQlQkElQTclRTUlQUUlOUQtdnVlLSVFNiU5QyU4RCVFNSU4QSVBMSVFNSU5NSU4NiVFNSU5RiU4RS92aXRlL3BsdWdpbnMvbGF5b3V0cy50c1wiO2ltcG9ydCBMYXlvdXRzIGZyb20gJ3ZpdGUtcGx1Z2luLXZ1ZS1tZXRhLWxheW91dHMnXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVMYXlvdXRzKCkge1xyXG4gIHJldHVybiBMYXlvdXRzKClcclxufVxyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXHdvcmtJdGVtXFxcXFx1NzdFNVx1NEVBN1x1NUI5RC12dWUtXHU2NzBEXHU1MkExXHU1NTQ2XHU1N0NFXFxcXHZpdGVcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcd29ya0l0ZW1cXFxcXHU3N0U1XHU0RUE3XHU1QjlELXZ1ZS1cdTY3MERcdTUyQTFcdTU1NDZcdTU3Q0VcXFxcdml0ZVxcXFxwbHVnaW5zXFxcXHBhZ2VzLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi93b3JrSXRlbS8lRTclOUYlQTUlRTQlQkElQTclRTUlQUUlOUQtdnVlLSVFNiU5QyU4RCVFNSU4QSVBMSVFNSU5NSU4NiVFNSU5RiU4RS92aXRlL3BsdWdpbnMvcGFnZXMudHNcIjtpbXBvcnQgUGFnZXMgZnJvbSAndml0ZS1wbHVnaW4tcGFnZXMnXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVQYWdlcygpIHtcclxuICByZXR1cm4gUGFnZXMoe1xyXG4gICAgZGlyczogJ3NyYy92aWV3cycsXHJcbiAgICBleGNsdWRlOiBbXHJcbiAgICAgICcqKi9jb21wb25lbnRzLyoqLyoudnVlJyxcclxuICAgIF0sXHJcbiAgfSlcclxufVxyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXHdvcmtJdGVtXFxcXFx1NzdFNVx1NEVBN1x1NUI5RC12dWUtXHU2NzBEXHU1MkExXHU1NTQ2XHU1N0NFXFxcXHZpdGVcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcd29ya0l0ZW1cXFxcXHU3N0U1XHU0RUE3XHU1QjlELXZ1ZS1cdTY3MERcdTUyQTFcdTU1NDZcdTU3Q0VcXFxcdml0ZVxcXFxwbHVnaW5zXFxcXGNvbXByZXNzaW9uLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi93b3JrSXRlbS8lRTclOUYlQTUlRTQlQkElQTclRTUlQUUlOUQtdnVlLSVFNiU5QyU4RCVFNSU4QSVBMSVFNSU5NSU4NiVFNSU5RiU4RS92aXRlL3BsdWdpbnMvY29tcHJlc3Npb24udHNcIjtpbXBvcnQgeyBjb21wcmVzc2lvbiB9IGZyb20gJ3ZpdGUtcGx1Z2luLWNvbXByZXNzaW9uMidcclxuaW1wb3J0IHR5cGUgeyBQbHVnaW5PcHRpb24gfSBmcm9tICd2aXRlJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQ29tcHJlc3Npb24oZW52LCBpc0J1aWxkKSB7XHJcbiAgY29uc3QgcGx1Z2luOiAoUGx1Z2luT3B0aW9uIHwgUGx1Z2luT3B0aW9uW10pW10gPSBbXVxyXG4gIGlmIChpc0J1aWxkKSB7XHJcbiAgICBjb25zdCB7IFZJVEVfQlVJTERfQ09NUFJFU1MgfSA9IGVudlxyXG4gICAgY29uc3QgY29tcHJlc3NMaXN0ID0gVklURV9CVUlMRF9DT01QUkVTUy5zcGxpdCgnLCcpXHJcbiAgICBpZiAoY29tcHJlc3NMaXN0LmluY2x1ZGVzKCdnemlwJykpIHtcclxuICAgICAgcGx1Z2luLnB1c2goXHJcbiAgICAgICAgY29tcHJlc3Npb24oKSxcclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgaWYgKGNvbXByZXNzTGlzdC5pbmNsdWRlcygnYnJvdGxpJykpIHtcclxuICAgICAgcGx1Z2luLnB1c2goXHJcbiAgICAgICAgY29tcHJlc3Npb24oe1xyXG4gICAgICAgICAgZXhjbHVkZTogWy9cXC4oYnIpJC8sIC9cXC4oZ3opJC9dLFxyXG4gICAgICAgICAgYWxnb3JpdGhtOiAnYnJvdGxpQ29tcHJlc3MnLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBwbHVnaW5cclxufVxyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkQ6XFxcXHdvcmtJdGVtXFxcXFx1NzdFNVx1NEVBN1x1NUI5RC12dWUtXHU2NzBEXHU1MkExXHU1NTQ2XHU1N0NFXFxcXHZpdGVcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcd29ya0l0ZW1cXFxcXHU3N0U1XHU0RUE3XHU1QjlELXZ1ZS1cdTY3MERcdTUyQTFcdTU1NDZcdTU3Q0VcXFxcdml0ZVxcXFxwbHVnaW5zXFxcXGFyY2hpdmVyLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi93b3JrSXRlbS8lRTclOUYlQTUlRTQlQkElQTclRTUlQUUlOUQtdnVlLSVFNiU5QyU4RCVFNSU4QSVBMSVFNSU5NSU4NiVFNSU5RiU4RS92aXRlL3BsdWdpbnMvYXJjaGl2ZXIudHNcIjtpbXBvcnQgZnMgZnJvbSAnbm9kZTpmcydcclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xyXG5pbXBvcnQgYXJjaGl2ZXIgZnJvbSAnYXJjaGl2ZXInXHJcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAndml0ZSdcclxuXHJcbmZ1bmN0aW9uIHNsZWVwKG1zKSB7XHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUFyY2hpdmVyKGVudik6IFBsdWdpbiB7XHJcbiAgY29uc3QgeyBWSVRFX0JVSUxEX0FSQ0hJVkUgfSA9IGVudlxyXG4gIGxldCBvdXREaXI6IHN0cmluZ1xyXG4gIHJldHVybiB7XHJcbiAgICBuYW1lOiAndml0ZS1wbHVnaW4tYXJjaGl2ZXInLFxyXG4gICAgYXBwbHk6ICdidWlsZCcsXHJcbiAgICBjb25maWdSZXNvbHZlZChyZXNvbHZlZENvbmZpZykge1xyXG4gICAgICBvdXREaXIgPSByZXNvbHZlZENvbmZpZy5idWlsZC5vdXREaXJcclxuICAgIH0sXHJcbiAgICBhc3luYyBjbG9zZUJ1bmRsZSgpIHtcclxuICAgICAgaWYgKFsnemlwJywgJ3RhciddLmluY2x1ZGVzKFZJVEVfQlVJTERfQVJDSElWRSkpIHtcclxuICAgICAgICBhd2FpdCBzbGVlcCgxMDAwKVxyXG4gICAgICAgIGNvbnN0IGFyY2hpdmUgPSBhcmNoaXZlcihWSVRFX0JVSUxEX0FSQ0hJVkUsIHtcclxuICAgICAgICAgIC4uLihWSVRFX0JVSUxEX0FSQ0hJVkUgPT09ICd6aXAnICYmIHsgemxpYjogeyBsZXZlbDogOSB9IH0pLFxyXG4gICAgICAgICAgLi4uKFZJVEVfQlVJTERfQVJDSElWRSA9PT0gJ3RhcicgJiYgeyBnemlwOiB0cnVlLCBnemlwT3B0aW9uczogeyBsZXZlbDogOSB9IH0pLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oYCR7b3V0RGlyfS4ke2RheWpzKCkuZm9ybWF0KCdZWVlZLU1NLURELUhILW1tLXNzJyl9LiR7VklURV9CVUlMRF9BUkNISVZFID09PSAnemlwJyA/ICd6aXAnIDogJ3Rhci5neid9YClcclxuICAgICAgICBhcmNoaXZlLnBpcGUob3V0cHV0KVxyXG4gICAgICAgIGFyY2hpdmUuZGlyZWN0b3J5KG91dERpciwgZmFsc2UpXHJcbiAgICAgICAgYXJjaGl2ZS5maW5hbGl6ZSgpXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgfVxyXG59XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcd29ya0l0ZW1cXFxcXHU3N0U1XHU0RUE3XHU1QjlELXZ1ZS1cdTY3MERcdTUyQTFcdTU1NDZcdTU3Q0VcXFxcdml0ZVxcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJEOlxcXFx3b3JrSXRlbVxcXFxcdTc3RTVcdTRFQTdcdTVCOUQtdnVlLVx1NjcwRFx1NTJBMVx1NTU0Nlx1NTdDRVxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcY29uc29sZS50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovd29ya0l0ZW0vJUU3JTlGJUE1JUU0JUJBJUE3JUU1JUFFJTlELXZ1ZS0lRTYlOUMlOEQlRTUlOEElQTElRTUlOTUlODYlRTUlOUYlOEUvdml0ZS9wbHVnaW5zL2NvbnNvbGUudHNcIjtpbXBvcnQgVHVyYm9Db25zb2xlIGZyb20gJ3VucGx1Z2luLXR1cmJvLWNvbnNvbGUvdml0ZSdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUNvbnNvbGUoKSB7XHJcbiAgcmV0dXJuIFR1cmJvQ29uc29sZSgpXHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFx3b3JrSXRlbVxcXFxcdTc3RTVcdTRFQTdcdTVCOUQtdnVlLVx1NjcwRFx1NTJBMVx1NTU0Nlx1NTdDRVxcXFx2aXRlXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXHdvcmtJdGVtXFxcXFx1NzdFNVx1NEVBN1x1NUI5RC12dWUtXHU2NzBEXHU1MkExXHU1NTQ2XHU1N0NFXFxcXHZpdGVcXFxccGx1Z2luc1xcXFxiYW5uZXIudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L3dvcmtJdGVtLyVFNyU5RiVBNSVFNCVCQSVBNyVFNSVBRSU5RC12dWUtJUU2JTlDJThEJUU1JThBJUExJUU1JTk1JTg2JUU1JTlGJThFL3ZpdGUvcGx1Z2lucy9iYW5uZXIudHNcIjtpbXBvcnQgYmFubmVyIGZyb20gJ3ZpdGUtcGx1Z2luLWJhbm5lcidcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUJhbm5lcigpIHtcclxuICByZXR1cm4gYmFubmVyKGBcclxuLyoqXHJcbiAqIFx1NzUzMSBGYW50YXN0aWMtc3RhcnRraXQgXHU2M0QwXHU0RjlCXHU2MjgwXHU2NzJGXHU2NTJGXHU2MzAxXHJcbiAqIGh0dHBzOi8vaG9vcmF5LmdpdGVlLmlvL2ZhbnRhc3RpYy1zdGFydGtpdC9cclxuICogUG93ZXJlZCBieSBGYW50YXN0aWMtc3RhcnRraXRcclxuICogaHR0cHM6Ly9ob29yYXkuZ2l0aHViLmlvL2ZhbnRhc3RpYy1zdGFydGtpdC9cclxuICovXHJcbiAgYClcclxufVxyXG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQXdULE9BQU9BLFNBQVE7QUFDdlUsT0FBT0MsV0FBVTtBQUNqQixPQUFPQyxjQUFhO0FBQ3BCLFNBQVMsY0FBYyxlQUFlOzs7QUNGdEMsT0FBTyxTQUFTO0FBQ2hCLE9BQU8sWUFBWTs7O0FDRjBVLE9BQU8sZ0JBQWdCO0FBR3JXLFNBQVIsVUFBbUM7QUFDeEMsU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sT0FBTztBQUFBLElBQ1AsTUFBTSxhQUFhO0FBQ2pCLFlBQU0sRUFBRSxNQUFNLE9BQU8sU0FBUyxVQUFVLElBQUk7QUFBQSxJQUM5QztBQUFBLEVBQ0Y7QUFDRjs7O0FDWDZWLE9BQU8saUJBQWlCO0FBRXRXLFNBQVIsZUFBZ0MsS0FBSztBQUMxQyxRQUFNLEVBQUUsbUJBQW1CLElBQUk7QUFDL0IsU0FBTyx1QkFBdUIsVUFBVSxZQUFZO0FBQ3REOzs7QUNMbVcs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
